from django.db import models # 父类模型

# 时间类
'''
目的是把模型重复的字段抽取出来通过类的继承方式，
但要迁移会把该模型变成一张表,所有不能让该模型变成表(要保持为字段)
'''
class DateTimeModelMixin(models.Model): # 继承是固定的
    '''这是一个：自定义时间字段与修改时间字段的扩展类'''
    c_time = models.DateTimeField('创建时间',auto_now_add=True)
    x_time = models.DateTimeField('修改时间',auto_now=True)

    # 源类
    class Meta:
        abstract = True # abstract 表示:抽象模型类,迁移的时候不会生成对应的表,只是用于扩展,给其他模型继承使用

# 逻辑删除的类
class IsDeleteMixin(models.Model):  # 继承是固定的
    '''自定义一个逻辑删除的扩展类'''
    is_delete = models.BooleanField(verbose_name='逻辑删除', default=False,help_text='逻辑删除')  # 定义逻辑删除的字段

    #  viewsets.ModelViewSet 已经写好了增删改查 重写里面的删除方法：实现逻辑删除
    def delete(self, using=None, keep_parents=False):
        self.is_delete = True  # 删除
        self.save()  # 保存数据

    # 源类
    class Meta:
        abstract = True  # abstract 表示:抽象模型类,迁移的时候不会生成对应的表,只是用于扩展,给其他模型继承使用


# 整合一个扩展类
class ModelSetMixin(DateTimeModelMixin,IsDeleteMixin): # 继承时间类与逻辑删除类
    '''自定义整合的模型扩展类'''
    # 源类
    class Meta:
        abstract = True # # abstract 表示:抽象模型类,迁移的时候不会生成对应的表,只是用于扩展,给其他模型继承使用
